package ar.edu.utn.frsf.tpae.a2012.g05.facade;

import java.util.List;

import ar.edu.utn.frsf.tpae.a2012.g05.entity.Cliente;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Cuenta;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Movimiento;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Pago;
import ar.edu.utn.frsf.tpae.a2012.g05.exception.NegocioException;

public interface HomeBankingFacade {

	
	/**
	 * Se comunica con el servicio del cliente para realizar el login
	 * 
	 * @param nroCliente el cliente a loguear
	 * @param password el password del cliente
	 * @return el cliente logueado o null si se produjo un error
	 */
	public Cliente login(String nroCliente, String password);
	
	/**
	 * Se comunica con el servicio de movimientos para realizar un pago.
	 * 
	 * @param pago el pago a realizar
	 * @throws NegocioException si se produjo un error al realizar el pago
	 */
	public void realizarPago(Pago pago) throws NegocioException;
	
	/**
	 * Se comunica con el servicio de movimientos para buscar todos los movimientos
	 * de una cuenta.
	 * 
	 * @param cuenta la cuenta  que tiene asociado los movimientos
	 * @return los movimientos asociados a la cuenta
	 * @throws NegocioException si se produjo un error
	 */
	public List<Movimiento> findMovimientosCuenta(Cuenta cuenta)  throws NegocioException;

	/**
	 * Se comunica con el servicio de cuentas para buscar todos las cuentas
	 * de un cliente.
	 * 
	 * @param cliente: el cliente que tiene asociado las cuentas
	 * @return las cuentas asociadas al cliente
	 * @throws NegocioException si se produjo un error
	 */	
	public List<Cuenta> findCuentasCliente(Cliente cliente)  throws NegocioException;
	
	public Cuenta findCuentaById(Integer idCuenta);
}
